package ma.ac.onousc.gestionfi.budget.services;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.ejb.EJB;
import javax.ejb.Stateless;

import ma.ac.onousc.gestionfi.budget.model.Etablissement;
import ma.ac.onousc.gestionfi.budget.model.Personnel;
import ma.ac.onousc.gestionfi.budget.model.ProgrammeEmploi;
import ma.ac.onousc.gestionfi.budget.model.Rubrique;
import ma.ac.onousc.gestionfi.budget.model.RubriqueBudgetaire;
import ma.ac.onousc.gestionfi.budget.model.Soumettre;
import ma.ac.onousc.gestionfi.budget.model.TypeBudget;
import ma.ac.onousc.gestionfi.budget.model.Ville;
import ma.ac.onousc.gestionfi.budget.model.DAO.EtablissementDAO;
import ma.ac.onousc.gestionfi.budget.model.DAO.PersonnelDAO;
import ma.ac.onousc.gestionfi.budget.model.DAO.ProgrammeEmploiDAO;
import ma.ac.onousc.gestionfi.budget.model.DAO.RubriqueBudgetaireDAO;
import ma.ac.onousc.gestionfi.budget.model.DAO.RubriqueDAO;
import ma.ac.onousc.gestionfi.budget.model.DAO.SoumettreDAO;
import ma.ac.onousc.gestionfi.budget.model.DAO.TypeBudgetDAO;
import ma.ac.onousc.gestionfi.budget.model.DAO.VilleDAO;

import org.primefaces.model.TreeNode;

@Stateless(name = "budgetServices")
public class BudgetServices implements BudgetManager {
	@EJB
	PersonnelDAO personnelDAO;
	@EJB
	TypeBudgetDAO typeBudgetDAO;
	@EJB
	RubriqueDAO rubriqueDAO;
	@EJB
	ProgrammeEmploiDAO programmeEmploiDAO;
	@EJB
	EtablissementDAO etablissementDAO;
	@EJB
	RubriqueBudgetaireDAO rubriqueBudgetaireDAO;
	@EJB
	VilleDAO villeDAO;
	@EJB
	SoumettreDAO soumettreDAO;

	// ////////////////////////////
	@Override
	public Personnel authentifier(String login, String pwd) {
		return personnelDAO.authentifier(login, pwd);
	}

	@Override
	public List<TypeBudget> findAllTypeBudget() {
		return typeBudgetDAO.findAllTypeBudget();
	}

	@Override
	public List<Rubrique> findAllRubrique() {
		return rubriqueDAO.findAllRubrique();
	}

	@Override
	public List<Rubrique> findRubriqueByTypeBudget(int typeBudget) {
		return rubriqueDAO.findRubriqueByTypeBudget(typeBudget);
	}

	@Override
	public TypeBudget findTypeBudgetByID(int idTypeBudget) {
		return typeBudgetDAO.findById(idTypeBudget);
	}

	@Override
	public TypeBudget findTypeBudgetByIntitule(String intitule) {
		return typeBudgetDAO.findTypeBudgetByIntitule(intitule);
	}

	@Override
	public List<ProgrammeEmploi> findAllProgrammeEmploi() {
		return programmeEmploiDAO.findAll();
	}

	@Override
	public ProgrammeEmploi makePersistent(ProgrammeEmploi programmeEmploi) {
		return programmeEmploiDAO.makePersistent(programmeEmploi);
	}

	@Override
	public List<Etablissement> findAllEtablissement() {
		return etablissementDAO.findAll();
	}

	@Override
	public Map<Integer, String> findRubriquesWithChildren(TypeBudget typeBudget) {
		return rubriqueDAO.findRubriquesWithChildren(typeBudget);
	}

	@Override
	public List<RubriqueBudgetaire> findAllRubriqueBudgetaire() {
		return this.rubriqueBudgetaireDAO.findAllRubriqueBudgetaire();
	}

	@Override
	public List<RubriqueBudgetaire> findRubriqueBudgetaireByTypeBudgetAndAnnee(
			TypeBudget typeBudget, ProgrammeEmploi pe) {
		return this.rubriqueBudgetaireDAO.findRubriqueBudgetaireByTypeBudget(
				typeBudget, pe);
	}

	@Override
	public Etablissement findEtablissementSiege() {
		return this.etablissementDAO.findSiege();
	}

	@Override
	public List<Personnel> findAllPersonnel() {
		return personnelDAO.findAllPersonnel();
	}

	@Override
	public Ville makePersistent(Ville ville) {

		return villeDAO.makePersistent(ville);
	}

	@Override
	public List<Object> findRubriqueBudgetaireByEtabAnnee(
			Integer idEtablissement, int annee, int idTypeBudget) {
		return rubriqueBudgetaireDAO.findRubriqueBudgetaireByEtaBAnnee(
				idEtablissement, annee, idTypeBudget);
	}

	@Override
	public List<Integer> findAnnee() {

		return programmeEmploiDAO.findAnnee();
	}

	@Override
	public List<Etablissement> findEtablissementCUs() {
		return this.etablissementDAO.findCUs();
	}

	@Override
	public List<Etablissement> findAllEtablissementNonSoumis(
			ProgrammeEmploi programmeEmploi) {
		return this.etablissementDAO.findNonSoumis(programmeEmploi);
	}

	@Override
	public Etablissement findEtablissementByID(int idEtablissement) {
		return this.etablissementDAO.findById(idEtablissement);
	}

	@Override
	public RubriqueBudgetaire makePersistent(
			RubriqueBudgetaire rubriqueBudgetaire) {
		return this.rubriqueBudgetaireDAO.makePersistent(rubriqueBudgetaire);
	}

	@Override
	public ProgrammeEmploi findProgrammeEmploiByAnneeAndTypeBudget(int annee,
			TypeBudget tb) {
		return this.programmeEmploiDAO.findByAnneeAndTypeBudget(annee, tb);
	}

	@Override
	public ProgrammeEmploi findByIdPro(int id) {

		return this.programmeEmploiDAO.findByIdPro(id);
	}

	@Override
	public void parcourirArbreRubriqueBudgetaire(TreeNode arbre) {
		this.rubriqueBudgetaireDAO.parcourirArbre(arbre);
	}

	@Override
	public HashMap<Integer, BigDecimal> findSUMRubriqueBudgetaireByTypeBudgetAndAnnee(
			TypeBudget typeBudget, ProgrammeEmploi pe) {
		return this.rubriqueBudgetaireDAO.findSUMByTypeBudgetAndAnnee(
				typeBudget, pe);
	}

	@Override
	public List<RubriqueBudgetaire> findRubriquesBudgetaireByProgrammeEmploiAndEtablissement(
			ProgrammeEmploi programmeEmploi, Etablissement etablissement) {
		return this.rubriqueBudgetaireDAO
				.findByProgrammeEmploiAndEtablissement(programmeEmploi,
						etablissement);
	}

	@Override
	public List<Personnel> findByEtab(int id) {

		return this.personnelDAO.findByEtab(id);
	}

	@Override
	public List<ProgrammeEmploi> findAllFonc() {

		return this.programmeEmploiDAO.findAllFonc();
	}

	@Override
	public Soumettre makePersistent(Soumettre rapportASoumettre) {
		return soumettreDAO.makePersistent(rapportASoumettre);
	}

	@Override
	public Personnel findPersonnelByID(int id) {
		return personnelDAO.findById(id);
	}

	@Override
	public boolean isBudgetSoumis(Etablissement etablissement,
			ProgrammeEmploi programmeEmploi) {
		return soumettreDAO.isBudgetSoumis(etablissement, programmeEmploi);
	}

	@Override
	public boolean isProgrammeEmploiCloture(ProgrammeEmploi programmeEmploi) {
		return programmeEmploiDAO.isCloture(programmeEmploi);
	}

	@Override
	public int findAnneeMax() {
		return programmeEmploiDAO.findAnneeMaxFonc();
	}

	@Override
	public Rubrique makePersistent(Rubrique rubrique) {

		return rubriqueDAO.makePersistent(rubrique);
	}

	@Override
	public RubriqueBudgetaire findByEtabAndAnneeAndRubrique(ProgrammeEmploi annee, Etablissement etablissement,Rubrique rubrique) {

		return rubriqueBudgetaireDAO.findByEtabAndAnneeAndRubrique(annee, etablissement, rubrique);
	}

	@Override
	public Personnel makePersistent(Personnel eng) {
		return this.personnelDAO.makePersistent(eng);
	}

	@Override
	public void makeTransient(Personnel eng) {
		this.personnelDAO.makeTransient(eng);
		
	}

	@Override
	public Personnel findPersonnelById(int id) {
		return this.personnelDAO.findById(id);
	}

	@Override
	public Personnel findPersonnelByLogin(String login) {
		return this.personnelDAO.findByLogin(login);
	}

}
